package com.xzzz.irda.guardcat.server.metric;


import com.xzzz.irda.guardcat.server.app.pojo.MachineInfo;

import java.lang.annotation.*;

/**
 * 指标监听, 标明一个方法作为 {@link MetricListener#metric()}} 类型指标的监听类, 每次拉取到该指标时会调用被此注解的方法
 * <p>
 * 被注解的方法只能包含两个参数, 分别为:
 * <p>
 * 1. {@link MachineInfo}
 * <p>
 * 2. {@link MetricInfo} 的子类, 也就是 {@link MetricListener#metric()}} 参数所设置的类
 *
 * @author xzzz
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MetricListener {

    /**
     * 指定该方法所监听的指标对象是什么, 方法的第二个参数必须与该属性的类型相同
     */
    Class<? extends MetricInfo> metric();

}
